- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин
Шрифт:
Интервал:
Закладка:
Большинство компонентов снабжены обработчиком передачи TransferHandler по умолчанию.
Вы можете создать и установить свой собственный обработчик переноса для любого компонента.
В этом примере показана реализация переноса данных для метки, которая не имеет этой функциональности по умолчанию.
Здесь мы создаем объект TransferHandler с помощью конструктора, в котором указываем Java Bean свойство компонента, используемое для переноса данных.
Помним, что Swing компоненты является Java Bean компонентами и их свойства можно получить с помощью интерфейса Java Bean API, а именно класса BeanInfo.
Здесь используется свойство text метки.
Установкой объекта TransferHandler для метки мы включаем перенос текста в метку.
Для включения переноса текста из метки, мы присоединяем слушателя событий мыши к метке, и в обработчике нажатия клавиши мыши на источнике данных, в данном случае это метка, мы применяем к объекту TransferHandler метод exportAsDrag, который переносит данные из источника данных.
Создание собственного Swing компонента
Мы уже создавали собственный AWT компонент, расширяя класс Component и переопределяя его метод paint.
Для создания собственного Swing компонента нужно расширить класс JComponent, переопределив его метод paintComponent.
Метод paintComponent – это место, где должен быть размещен весь код рисования компонента.
Этот метод будет вызываться операционной системой всякий раз, когда нужно визуализировать компонент.
Но на самом деле рисование компонента начинается выше в иерархии классов вызовом метода paint AWT класса Component.
Далее метод paint вызывает поочередно методы paintComponent, paintBorder и paintChildren класса JComponent.
Как уже было сказано, большинство стандартных компонентов Swing имеют внешний вид, реализованный отдельными делегатами пользовательского интерфейса.
Это означает, что рисование стандартных компонентов Swing происходит следующим образом.
Метод paint вызывает paintComponent.
Если свойство ui не равно null, то есть для компонента есть делегат, мето paintComponent вызывает метод ui. update.
Если свойство компонента opaque истинно, метод ui. update заполняет фон компонента цветом и вызывает метод ui.paint.
Метод ui.paint отображает содержимое компонента.
Поэтому если мы создаем собственный компонент, расширяя конкретный Swing компонент, в методе paintComponent нужно вызвать этот метод суперкласса, чтобы сначала отрисовался делегат.
Другой способ декорировать существующий Swing компонент – это использовать компонент JLayer.
JLayer – это универсальный декоратор для компонентов Swing, который позволяет реализовывать различные расширенные эффекты рисования, а также получать уведомления обо всех AWT событиях.
Компонент JLayer делегирует рисование и обработку входных событий объекту LayerUI.
То есть компонент JLayer служит оберткой вокруг существующего Swing компонента, передавая функциональность рисования и обработки событий объекту LayerUI.
Таким образом, для рисования на существующем Swing компоненте, нужно создать класс, расширяющий класс LayerUI, и реализующий его метод paint.
Затем нужно создать компонент JLayer на основе существующего Swing компонента и объекта LayerUI.
Краткий обзор платформы JavaFX
JavaFX была создана как универсальная платформа, предоставляющая современные GUI-компоненты с возможностью их декларативного описания, богатый набор библиотек для работы с медиаконтентом и 2D/3D графикой, а также высокопроизводительную среду выполнения приложений.
Look and feel JavaFX интерфейса изменяется не с помощью делегатов, как в Swing, а с помощью CSS таблиц, тем самым разделяя внешний вид от кода.
Кроме того, вы можете разрабатывать внешний вид интерфейса не на языке Java, а на скриптовом языке FXML, а Java-код использовать для логики приложения.
Для визуальной разработки интерфейса вы можете использовать редактор JavaFX Scene Builder, который генерирует FXML разметку.
Для начала мы кратко пробежимся по тому объему знаний, который мы затем будем разбирать шаг за шагом.
Компоненты графического интерфейса пользователя платформы JavaFX представлены такими пакетами JavaFX API как
scene.control,
scene.chart,
scene.image,
scene.layout,
scene.media,
scene.shape,
scene.canvas,
scene. text,
scene. web и
stage.
Все компоненты GUI-интерфейса являются объектами Node узлов графа сцены и характеризуются идентификатором, CSS-стилем, границами, визуальными эффектами, прозрачностью, трансформациями, обработчиками событий, состоянием, режимом наложения и участием в анимации.
Пакет scene.control предоставляет такие компоненты графического интерфейса пользователя как панель Accordion, кнопку Button, переключатель CheckBox, список ChoiceBox, выбор цвета ColorPicker, выпадающий список ComboBox, выбор даты DatePicker, контекстное меню ContextMenu, гиперссылку Hyperlink, метку Label, список ListView, меню Menu, панель MenuBar, кнопку MenuButton, постраничную навигацию Pagination, поле PasswordField, индикатор ProgressBar, индикатор ProgressIndicator, переключатель RadioButton, панель ScrollPane, прокрутку ScrollBar, разделитель Separator, бегунок Slider, кнопку SplitMenuButton, панель SplitPane, таблицу TableView, панель TabPane, поле TextArea, поле TextField, панель TitledPane, кнопку ToggleButton, группу ToggleGroup, панель ToolBar, окно Tooltip, таблицу TreeTableView, дерево TreeView.
Пакет scene.chart обеспечивает создание диаграмм AreaChart, BarChart, BubbleChart, LineChart, PieChart, ScatterChart, StackedAreaChart, StackedBarChart.
Пакет scene.image предоставляет компоненты изображения ImageView и WritableImage.
Пакет scene.layout предоставляет панели компоновки AnchorPane, BorderPane, FlowPane, GridPane, HBox, StackPane, TilePane, VBox.
Пакет scene.media предоставляет компоненты медиаконтента MediaView и аудиоконтента AudioClip.
Пакет scene.shape обеспечивает рисование 2D геометрических форм с помощью таких компонентов как Arc, Circle, CubicCurve, Ellipse, Line, Path, Polygon, Polyline, QuadCurve, Rectangle, SVGPath, а также 3D графики с помощью таких GUI-компонентов как Box, Cylinder, MeshView, Sphere.
Пакет scene.canvas позволяет с помощью классов Canvas и GraphicsContext создавать изображения 2D-графики из простых геометрических форм, из существующих изображений и текста.
Пакет scene. text предоставляет компоненты текста Text и TextFlow.
Пакет scene. web обеспечивает отображение HTML-контента с помощью компонента WebView и редактирование HTML-контента с помощью компонента HTMLEditor.
Пакет scene предоставляет группу Group и сцену Scene, а также камеры ParallelCamera и PerspectiveCamera и источники света AmbientLight и PointLight.
Пакет stage предоставляет компоненты окон Stage, Popup, DirectoryChooser и FileChooser.
Пакеты embed. swing и embed. swt обеспечивают встраивание JavaFX компонентов в Swing (и наоборот) и SWT приложения.
Пакет css позволяет определять пользовательские свойства и CSS псевдо классы для компонентов.
Пакет print обеспечивает печать узла графа JavaFX сцены.
Пакет fxml обеспечивает декларативное XML описание GUI-компонентов.
Пакет scene. effect позволяет присоединять к GUI-компонентам визуальные эффекты смешивания, свечения, тени, размытия, цвета, смещения, освещения, перспективы, отражения, старения.
Пакет animation позволяет добавлять трансформации и анимации для GUI-компонентов.
Отображение 2D графики в JavaFX-приложениях возможно тремя способами:

